﻿/************************************************************************************************/
/**                        Controle de Inicialização da Master Page                            **/
/************************************************************************************************/
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(beginRequest);
prm.add_endRequest(endRequest);

function beginRequest(sender, args) {
    bloquearUI();
}

function endRequest(sender, args) {
    desbloquearUI();
    var error = args.get_error();
    if (error != null) {
        // Set the error handled flag to avoid a runtime error reaching the user.
        args.set_errorHandled(true);
        // Remove the error name from the message
        var msg = error.message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", "");
        $.jGrowl(msg, { header: 'Erro', theme: 'mensagemErro', sticky: true, position: 'top-right', closerTemplate: '<div>[ fechar todos ]</div>' });
    }
}

/************************************************************************************************/
/**                        Utilitários bloqueio/desbloqueio de tela                            **/
/************************************************************************************************/
function bloquearUI() {
    $.blockUI({ message: '<table width="234" border="0" cellpadding="0" cellspacing="0" style="filter:alpha(opacity=100);"><tr><td height="126" align="left" valign="middle" class="screenLoading"><font class="subDivLoading"><span style="margin-left:16px;">Carregando...</span></font></td></tr></table>' });
}

function desbloquearUI() {
    $.unblockUI();
}

/************************************************************************************************/
/**                                   Utilitários mensagems                                    **/
/************************************************************************************************/
function mensagemInformacao(msg) {
    mensagem(msg, 'Informação', 'mensagemInformacao', 8000, false, 'top-right'); 
}

function mensagemAviso(msg) {
    mensagem(msg, 'Aviso', 'mensagemAviso', 8000, false, 'top-right'); 
}

function mensagemErro(msg) {
    mensagem(msg, 'Erro', 'mensagemErro', 8000, true, 'top-right'); 
}

function mensagemExcessaoOrfao(msg) {
    mensagem(msg, 'Erro inesperado', 'mensagemExcessaoOrfao', 8000, true, 'top-right'); 
}

function mensagem(msg, headerParam, themeParam, lifeParam, stickParam, positionParam) {
    $.jGrowl(msg, 
                { 
                    header: headerParam,
                    theme: themeParam, 
                    sticky: stickParam, 
                    life: lifeParam, 
                    position: positionParam, 
                    closerTemplate: '<div>[ fechar todos ]</div>'
                }
            );    
}

/************************************************************************************************/
/**                     Utilitários configuraca e validacao sistema                            **/
/************************************************************************************************/
function configSistema(urlRaiz) {
    configSistemaPopup(urlRaiz);
}

function configSistemaPopup(urlRaiz) {
    var popupEstaAberto = false;
    if (valorExiste(window.toolbar))
        popupEstaAberto = !window.toolbar.visible;
    else if (!popupEstaAberto) {
        // se não existir a propriedade toolbar (ie) faz uma validação recursiva, se alguma das janelas abertas, possui o name fullscreen
        popupEstaAberto = configSistemaPopupVerificarFullscreen(window);
    }

    if (!popupEstaAberto) {
        document.title = 'F&I Manager 3'
        var pop = open(location.href, 'fullscreen', 'toolbar=no,location=no,directories=no,menubar=no,status=yes,scrollbars=yes,resizable=yes');
        if (pop == null || pop.closed == true) {
            open(urlRaiz + 'BlankErroPopup.htm', '_self');
        }
        else {
            open(urlRaiz + 'Blank.html', '_self');
        }
    }
}

function configSistemaPopupVerificarFullscreen(windowPopup) {
    if (windowPopup.name == 'fullscreen')
        return true;
    else if (valorExiste(windowPopup.opener))
        return configSistemaPopupVerificarFullscreen(windowPopup.opener)
    else
        return false;
}

/************************************************************************************************/
/**                             Utilitários AjaxControlToolkit                                 **/
/************************************************************************************************/
function atribMaskedEditExtender(behaviorID, valor) {
    var maskedEditExtender = $find(behaviorID);
    if (!valorExiste(maskedEditExtender))
        return;
    var wrapper = Sys.Extended.UI.TextBoxWrapper.get_Wrapper(maskedEditExtender.get_element());
    wrapper.set_Value(valor);
}

function bindDynamicPopulate(behaviorID, contextKeyAtual, param, paramAvalMudancaFiltro, paramObr, forcarAtualizacao, defaultValue) {
    return bindPopulateAjaxControlToolkit(behaviorID, contextKeyAtual, param, paramAvalMudancaFiltro, paramObr, forcarAtualizacao, defaultValue, refreshDynamicPopulate, clearContentDynamicPopulate);
}

function bindCascadingDropDownList(behaviorID, contextKeyAtual, param, paramAvalMudancaFiltro, paramObr, forcarAtualizacao) {
    return bindPopulateAjaxControlToolkit(behaviorID, contextKeyAtual, param, paramAvalMudancaFiltro, paramObr, forcarAtualizacao, null, refreshCascadingDropDownList, clearContentCascadingDropDownList);
}

function clearContentCascadingDropDownList(behaviorID, defaultValue) {
    var behavior = $find(behaviorID);
    if (!valorExiste(behavior))
        return;
    behavior._setOptions(null, false);
    behavior.raisePopulated(Sys.EventArgs.Empty);
}

function clearContentDynamicPopulate(behaviorID, defaultValue) {
    var behavior = $find(behaviorID);
    if (!valorExiste(behavior))
        return;
    behavior._setTargetHtml(defaultValue);
    behavior._setUpdating(false);
    behavior.raisePopulated(Sys.EventArgs.Empty);
}

function bindPopulateAjaxControToolkitConstruirContextKey(param) {
    function retornoContextKey(contextKey, algumValorEstaNull) {
        this.contextKey = contextKey;
        this.algumValorEstaNull = algumValorEstaNull;
    }
    if (!valorExiste(param)) {
        return new retornoContextKey(null, true);
    }

    // montando contextkey
    var contextKey = "";
    var algumValorEstaNull = false;
    for (i = 0; i < param.length; i++) {
        var valor = param[i];
        if (!valorExiste(valor)) {
            algumValorEstaNull = algumValorEstaNull || !valorExiste(param[i]);
            valor = "";
        }
        contextKey = contextKey + valor + "|"
    }
    contextKey = contextKey.substring(0, contextKey.length - 1);

    return new retornoContextKey(contextKey, algumValorEstaNull);
}

function bindPopulateAjaxControlToolkit(behaviorID, contextKeyAtual, param, paramAvalMudancaFiltro, paramObr, forcarAtualizacao, defaultValue, populate, clearContent) {
    var behaviour = $find(behaviorID);
    if (behaviour == null) 
        return;
    // contexKey
    var contextKey = bindPopulateAjaxControToolkitConstruirContextKey(param).contextKey;
    // Gatilho do filtro
    var contextKeyAvalMudancaFiltro = bindPopulateAjaxControToolkitConstruirContextKey(paramAvalMudancaFiltro).contextKey;
    if (!valorExiste(contextKeyAvalMudancaFiltro)) {
        contextKeyAvalMudancaFiltro = contextKey;
    }
    // verificando se algo mudou
    var nadaMudou = contextKeyAtual == contextKeyAvalMudancaFiltro;
    if (nadaMudou && !forcarAtualizacao) {
        atualizando = false; // flag atualizando como finalizado, uma vez que nada será feito
        behaviour.raisePopulated(Sys.EventArgs.Empty);
        return contextKeyAvalMudancaFiltro;
        
    }
    // verificando se algum valor obrigatorio está null
    var algumValorObrigatorioEstaNull = bindPopulateAjaxControToolkitConstruirContextKey(paramObr).algumValorEstaNull;

    if (algumValorObrigatorioEstaNull && !forcarAtualizacao) {
        if (clearContent)
            clearContent(behaviorID, defaultValue);
        atualizando = false; // flag atualizando como finalizado, uma vez que nada será feito
        behaviour.raisePopulated(Sys.EventArgs.Empty);
        return contextKeyAvalMudancaFiltro;
    }

    //** Finalizando ** //
    // fazendo atualização
    populate(behaviorID, contextKey);
    // Atualiza context key atual
    return contextKeyAvalMudancaFiltro;
}

function refreshCascadingDropDownList(behaviorID, contextKey) {
    behavior = $find(behaviorID);
    if (!valorExiste(behavior))
        return;

    behavior.set_contextKey(contextKey);
    behavior._onParentChange(null, false);
}

function refreshDynamicPopulate(behaviorID, contextKey) {
    var behavior = $find(behaviorID);
    if (!valorExiste(behavior))
        return;
    behavior.set_ContextKey(contextKey);
    behavior.populate();
}

function configEventosBehaviorCascata(behaviorID, bind) {
    var cddl = $find(behaviorID);
    if (!valorExiste(cddl))
        return;
    cddl.add_populated(bind);
}

/************************************************************************************************/
/**                         Utilitários string, formatacao e valores                           **/
/************************************************************************************************/
function valorExiste(value) {
    return (value != null)
           && (value != undefined)
    // determinados valores como false são entendidos como strings vazias tb
    // desta forma, antes de verificar vazio, se certifica que o tipo de dados é realmente string
           && ((typeof (value) != "string") || (value != ""))
}

function valorEhInvalido(value) {
    return (!valorExiste(value))
               || (isNaN(value))
               || (!isFinite(value))
               || (value == "")
               || (value == "-");
}

function formatPerc(value) {
    var perc = formatNumber(value);
    if (perc == "-")
        return perc;
    return perc + "%";
}

function formatNumber(value) {
    return formatNumber(value, 2);
}

function formatNumber(value, decimals) {
    var valorInvalido = valorEhInvalido(value);
    var intervaloIncorreto = value <= 0;
    if (valorInvalido || intervaloIncorreto) {
        return "-";
    }
    return $().number_format(value,
                   {
                       numberOfDecimals: decimals,
                       decimalSeparator: ',',
                       thousandSeparator: '.',
                       symbol: ''
                   });
}

function convToFloat(value) {
    if (!valorExiste(value))
        return .0;
    if (typeof (value) == "number")
        return value;
    var repDot = /\.+/g;
    var repComma = /,+/g;
    var repDash = /\_+/g;
    value = value
               .toString()
               .replace(repDot, "")
               .replace(repDash, "")
               .replace(repComma, ".")
               .trim();
    if (value.indexOf("%", 0) >= 0) {
        value = value.replace("%", "") / 100.0;
    }
    if (value.match(/\.$/)) {
        value = value.substring(0, value.length - 1);
    }
    var valorInvalido = valorEhInvalido(value);
    if (valorInvalido)
        return .0;
    return parseFloat(value);
}

String.prototype.trim = function() {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}